package com.ass.wechat.service;


import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Service;

import com.ass.base.service.BaseServiceImpl;
import com.ass.common.generated.dao.TArticleMapper;
import com.ass.common.generated.dao.WcRequestRecordMapper;
import com.ass.common.generated.model.TArticle;
import com.ass.common.generated.model.TArticleExample;
import com.ass.common.generated.model.WcRequestRecord;
import com.ass.common.utils.DateUtil;
import com.ass.common.utils.JsonUtil;
import com.ass.common.utils.RandomUtil;
import com.ass.common.utils.StringUtil;
import com.ass.page.menu.EnumArticleType;
import com.ass.wechat.message.respdto.Article;
import com.ass.wechat.message.respdto.NewsMessageResp;
import com.ass.wechat.message.respdto.TextMessageResp;
import com.ass.wechat.utils.GameUtil;
import com.ass.wechat.utils.MessageUtil;


/**
 * 核心服务类
 * 
 */
@Service
public class CoreServiceImpl extends BaseServiceImpl implements CoreService {
	
	
	
	@Resource
	private WcRequestRecordMapper wcRequestRecordMapper;
	
	@Resource
	private GuessNumberService guessNumberService;
	
	@Resource
	private PicService picService;
	
	@Resource
	private TArticleMapper tArticleMapper;
	
	/**
	 * 处理微信发来的请求
	 * 
	 * @param request
	 * @return
	 */
	public String processRequest(HttpServletRequest request) {
		String respMessage = null;
		try {
			// 默认返回的文本消息内容
			String respContent = "请求处理异常，请稍候尝试！";

			// xml请求解析
			Map<String, String> requestMap = MessageUtil.parseXml(request);
			
			// 发送方帐号（open_id）
			String fromUserName = requestMap.get("FromUserName");
			// 公众帐号
			String toUserName = requestMap.get("ToUserName");
			// 消息类型
			String msgType = requestMap.get("MsgType");
			
			//保存每次请求信息
			this.saveRequest(requestMap);
			
			// 回复文本消息
			TextMessageResp textMessage = new TextMessageResp();
			textMessage.setToUserName(fromUserName);
			textMessage.setFromUserName(toUserName);
			textMessage.setCreateTime(new Date().getTime());
			textMessage.setMsgType(MessageUtil.Resp_Message_Type_Text);
			textMessage.setFuncFlag(0);

		
			// 文本消息************
			if (msgType.equals(MessageUtil.Req_Message_Type_Text)){
				String content = requestMap.get("Content").trim();
				if("?".equals(content) || "？".equals(content) ){
					respContent = getMainMenu();
				
				}
				//原样回复表情
				else if( null != content && MessageUtil.isQqFace(content)){
					respContent = requestMap.get("Content");
				}
				//查看答案
				else if("芝麻开门".equals(content)){
					respContent = guessNumberService.getCurrentAnswer(fromUserName);
				}
				//查看游戏帮助
				else if ("help".equalsIgnoreCase(content)){
					respContent = guessNumberService.getGameRule();
					
				}
				// 查看游戏战绩
				else if("score".equalsIgnoreCase(content)){
					respContent = guessNumberService.getUserScore(request, fromUserName);
				}
				// 如果是4位数字并且无重复
				else if (GameUtil.verifyNumber(content) && !GameUtil.verifyRepeat(content)) {
					respContent = guessNumberService.process(request, fromUserName, content);
				}
				else{
					respContent = "请输入4个不重复的数字，例如：0269";
				}
				
			}
			// 图片消息**********
			else if (msgType.equals(MessageUtil.Req_Message_Type_Image)){
				respContent = "您发送的是图片消息！";
			}
			// 地理位置消息************
			else if (msgType.equals(MessageUtil.Req_Message_Type_Location)) {
				respContent = "您发送的是地理位置消息！";
			}
			// 链接消息********
			else if (msgType.equals(MessageUtil.Req_Message_Type_Link)) {
				respContent = "您发送的是链接消息！";
			}
			// 音频消息***********
			else if (msgType.equals(MessageUtil.Req_Message_Type_Voice)) {
				respContent = "您发送的是音频消息！";
			}
			// 事件推送   Req_Message_Type_Event = "event";******************
			else if (msgType.equals(MessageUtil.Req_Message_Type_Event)) {
				// 事件类型  event=CLICK
				String eventType = requestMap.get("Event");
				// 订阅
				if (eventType.equals(MessageUtil.Event_Type_Subscribe)) {
					respContent = "谢谢您的关注！";
				}
				// 取消订阅
				else if (eventType.equals(MessageUtil.Event_Type_Unsubscribe)) {
					// TODO 取消订阅后用户再收不到公众号发送的消息，因此不需要回复消息
				}
				// 自定义菜单点击事件
				else if (eventType.equals(MessageUtil.Event_Type_Click)) {
					String eventKey = requestMap.get("EventKey");
					if("event_gamerule".equals(eventKey)){
						respContent = guessNumberService.getGameRule();
					}
					else if("event_getscore".equals(eventKey)){
						respContent = guessNumberService.getUserScore(request, fromUserName);
					}
					else if("event_getanswer".equals(eventKey)){
						respContent = guessNumberService.getCurrentAnswer(fromUserName);
					}
					else if("productCenter".equals(eventKey)){
						//产品中心 文字列表
						TArticleExample example = new TArticleExample();
						example.createCriteria().andTypeEqualTo(EnumArticleType.product.getCode());
						example.setOrderByClause("  position asc ");
						List<TArticle> lst =  tArticleMapper.selectByExample(example);
						StringBuilder sb = new StringBuilder();
						for(TArticle a : lst){
							sb.append("<a href='"+this.getProp("homepage")+"door/a.do?p=p1&id=").append(a.getId()).append("' >").append(a.getHead()).append("</a> \n ");
						}
						respContent = sb.toString();
					}
					
					else if("contact_us".equals(eventKey)){
						respContent = "公司名称：北京东润家和投资担保有限公司\n电话：010-85306189\n地址：北京市朝阳区朝阳门外大街17号3层309室 ";
					}
					else if("aboutus".equals(eventKey)){
						//关于我们的一篇文章
						Article art = new Article("北京东润家和投资担保有限公司",
								"北京东润家和投资担保有限公司成立于2005年，业务范围主要是做投资咨询、贸易等等。 本公司成立至今,坚持一贯的社会责任感，一直致力于为企业用户提供优质应用服务开发。我们已经连续五、六年，每天24小时，全年不间断地为客户提供服务保障。",
								"http://mmbiz.qpic.cn/mmbiz/e8ByWSDcNQ9JmbPvmB0xXInW8nPxoXvlFHlzwVLtA0t45IfBfz8cTNjJFGjC103xCkpgXTyMufyhbO7kqMUbug/640?wx_fmt=jpeg&tp=webp&wxfrom=5",
								"http://mp.weixin.qq.com/s?__biz=MzA5NzkyNTAyNA==&mid=210457251&idx=1&sn=fa9b301a4add493b02ec2599ed9753e7#rd");
						
						NewsMessageResp newsMessageResp = new NewsMessageResp();
						List<Article> l = new ArrayList<Article>();
						l.add(art);
						newsMessageResp.setArticles(l);
						newsMessageResp.setArticleCount("1");
						newsMessageResp.setToUserName(fromUserName);
						newsMessageResp.setFromUserName(toUserName);
						newsMessageResp.setCreateTime(new Date().getTime());
						newsMessageResp.setMsgType(MessageUtil.Resp_Message_Type_News);
						newsMessageResp.setFuncFlag(0);
						respMessage = MessageUtil.newsMessageRespToXml(newsMessageResp);
						return respMessage;
					}
					else if("articleLst".equals(eventKey)){
						//业务文章的列表示例
						Article art = new Article("北京东润家和投资担保有限公司",
								"北京东润家和投资担保有限公司成立于2005年，业务范围主要是做投资咨询、贸易等等。 本公司成立至今,坚持一贯的社会责任感，一直致力于为企业用户提供优质应用服务开发。我们已经连续五、六年，每天24小时，全年不间断地为客户提供服务保障。",
								"http://mmbiz.qpic.cn/mmbiz/e8ByWSDcNQ9JmbPvmB0xXInW8nPxoXvlFHlzwVLtA0t45IfBfz8cTNjJFGjC103xCkpgXTyMufyhbO7kqMUbug/640?wx_fmt=jpeg&tp=webp&wxfrom=5",
								"http://mp.weixin.qq.com/s?__biz=MzA5NzkyNTAyNA==&mid=210457251&idx=1&sn=fa9b301a4add493b02ec2599ed9753e7#rd");
						
						Article art2 = new Article("东润投资抵押贷款流程图",
								"东润投资抵押贷款流程图",
								"http://mmbiz.qpic.cn/mmbiz/e8ByWSDcNQ9JmbPvmB0xXInW8nPxoXvlZqxB5RJ1386TKUTTmXO5L1tARx2QsXFRicdWXP0HLicib8PQT74sfT73Q/640?wx_fmt=jpeg&tp=webp&wxfrom=5",
								"http://mp.weixin.qq.com/s?__biz=MzA5NzkyNTAyNA==&mid=210458139&idx=2&sn=690c8b9d7e590b6fe000f5120fd0eb00#rd");
						
						Article art3 = new Article("中小企业,微型企业,私营业主,企业经营贷款",
								"中小企业,微型企业,私营业主,企业经营贷款",
								"http://mmbiz.qpic.cn/mmbiz/e8ByWSDcNQ9JmbPvmB0xXInW8nPxoXvlvvPXpMn4KzibofaA42J1mrDBsR58ibYtwcRGriaJib6JGLeLpXtpiajPIgg/640?wx_fmt=jpeg&tp=webp&wxfrom=5",
								"http://mp.weixin.qq.com/s?__biz=MzA5NzkyNTAyNA==&mid=210458139&idx=3&sn=563030e768a73c223fa3d1587c57b57a#rd");
						
						Article art4 = new Article("信用贷款-根据借款人已有的信用记录发放的贷款",
								"信用贷款-根据借款人已有的信用记录发放的贷款",
								"http://mmbiz.qpic.cn/mmbiz/e8ByWSDcNQ9JmbPvmB0xXInW8nPxoXvllnicE5JjSwHaJAwQKaiarJFT2VnwFdTNF4SeLBibdrlpoIUweic95AfzJw/640?wx_fmt=jpeg&tp=webp&wxfrom=5",
								"http://mp.weixin.qq.com/s?__biz=MzA5NzkyNTAyNA==&mid=210458139&idx=4&sn=049e3e728c5cc4227a07c8666b45ef48#rd");
						
						NewsMessageResp newsMessageResp = new NewsMessageResp();
						List<Article> l = new ArrayList<Article>();
						l.add(art);
						l.add(art2);
						l.add(art3);
						l.add(art4);
						newsMessageResp.setArticles(l);
						newsMessageResp.setArticleCount(StringUtil.getString(l.size()));
						newsMessageResp.setToUserName(fromUserName);
						newsMessageResp.setFromUserName(toUserName);
						newsMessageResp.setCreateTime(new Date().getTime());
						newsMessageResp.setMsgType(MessageUtil.Resp_Message_Type_News);
						newsMessageResp.setFuncFlag(0);
						respMessage = MessageUtil.newsMessageRespToXml(newsMessageResp);
						return respMessage;
						
						
					}

				
				}
			}

			//默认文本消息
			textMessage.setContent(respContent);
			respMessage = MessageUtil.textMessageRespToXml(textMessage);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return respMessage;
	}
	
	
	protected void  saveRequest(Map<String, String > map) {
		// 发送方帐号（open_id）
		String fromUserName = map.get("FromUserName");
		// 公众帐号
		String toUserName = map.get("ToUserName");
		// 消息类型
		String msgType = map.get("MsgType");
		WcRequestRecord wrr = new WcRequestRecord();
		wrr.setFromUserName(fromUserName);
		wrr.setToUserName(toUserName);
		wrr.setMsgType(msgType);
		wrr.setCreateTime(DateUtil.getCurrentTimestamp());
		try {
			wrr.setRequestContent(JsonUtil.writeValue(map));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
		wcRequestRecordMapper.insertSelective(wrr);
	}
	
	/**
	 * xiaoqrobot的主菜单
	 * 
	 * @return
	 */
	public String getMainMenu() {
		StringBuffer buffer = new StringBuffer();
//		buffer.append("您好，这里是wlheihei，请回复数字选择服务：").append("\n\n");
//		buffer.append("1  天气预报").append("\n");
//		buffer.append("2  公交查询").append("\n");
//		buffer.append("3  周边搜索").append("\n");
//		buffer.append("4  歌曲点播").append("\n");
//		buffer.append("5  经典游戏").append("\n");
//		buffer.append("6  美女电台").append("\n");
//		buffer.append("7  人脸识别").append("\n");
//		buffer.append("8  聊天唠嗑").append("\n\n");
//		buffer.append("回复“?”显示此帮助菜单");
		buffer.append("您好，这里是wlheihei，请回复数字选择服务：").append("\n\n");
		buffer.append("1  xxxx").append("\n");
		buffer.append("2  xxxx").append("\n");
		buffer.append("3  \ue046").append("\n");
		buffer.append("4  "+MessageUtil.emoji(0x1f60a)).append("\n");
		buffer.append("5  "+MessageUtil.emoji(0x1F60A)).append("\n");
		buffer.append("6  xxxx").append("\n");
		buffer.append("7  xxxx").append("\n");
		buffer.append("8  [难过] /难过 /::(").append("\n\n");
		buffer.append("回复“?”显示此帮助菜单");
		return buffer.toString();
	}
	
	public static void main(String[] args) {
		System.out.println(RandomUtil.getRandom(4));	
	}
}

